package com.triones.yjj.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.triones.yjj.entity.ActivityDO;
import com.triones.yjj.entity.InviteRewardDO;
import com.triones.yjj.entity.bo.*;
import com.triones.yjj.entity.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 活动 service 接口
 *
 * @Author: triones
 */
public interface ActivityService {

    /**
     * 获取活动列表
     * @param params
     * @return
     */
    List<ActivityVO> getList(ActivityListParams params);

    /**
     * 获取活动详情
     * @param id
     * @return
     */
    ActivityVO getDetailById(Long id);

    /**
     * 带访问权限的活动列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<VisitAuthActivityListVO> visitAuthActivityPageList(ActivityListParams params, PageQuery pageQuery);

    /**
     * 设置所有员工访问该活动
     * @param id
     * @return
     */
    Boolean setAllStaffVisit(Long id);

    ActivityWxInfoVO getActivityInfoById(Long id);

    ActivityCountBSAVO getActivityCountBSATotal(Long id);

    List<ActivityOrderUserVO> getActivityOrderUserList(Long id);

    /**
     * 保存活动内容
     * @param dto
     * @return
     */
    Boolean saveActivity(ActivityDO dto);

    /**
     * 查看活动列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<ActivityListVO> pageList(ActivityListParams params, PageQuery pageQuery);

    /**
     * 获取员工商家活动列表
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffActivityListVO> getStaffActivityPageList(WxStaffDetailVO params, PageQuery pageQuery);

    /**
     * 活动详情统计
     * @param id
     * @return
     */
    Map activityDetailStats(Long id);

    /**
     * 活动订单列表
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<ActivityOrderListVO> activityOrderList(ActivityManageDetailParams params, PageQuery pageQuery);

    /**
     * 活动拼团列表
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<ActivityOrderGroupPurchaseListVO> activityOrderGroupPurchaseList(ActivityManageDetailParams params, PageQuery pageQuery);

    /**
     * 退款列表
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<RefundListVO> refundPageList(RefundListParams params, PageQuery pageQuery);

    /**
     * 活动邀请奖励列表
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<InviteRewardListVO> inviteRewardPageList(InviteRewardListParams params, PageQuery pageQuery);

    /**
     * 通过id获取详情
     * @param id
     * @return
     */
    ActivityVO getInfoById(Long id);

    /**
     * 修改活动
     * @param dto
     * @return
     */
    Boolean editActivity(ActivityDO dto);

    /**
     * 删除活动
     * @param id
     * @return
     */
    Boolean remove(Long id);

    /**
     * 邀请奖励核销
     * @param dto
     * @return
     */
    Boolean inviteRewardVerification(InviteRewardDO dto);

    ActivityVO getStaffNewActivity(Long staffId,Long userId);

    ActivityVO selectVoById(Long id);

    /**
     * 查询活动草稿列表
     * @param pageQuery
     * @return
     */
    TableDataInfo<ActivityListVO> draftPageList(PageQuery pageQuery);

    /**
     * 可移动团列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<CanMoveTeamVO> canMoveTeamPageList(CanMoveTeamParams params, PageQuery pageQuery);

    /**
     * 活动大屏数据
     * @param activityId
     * @return
     */
    Map activityBigData(Long activityId);

    /**
     * 获取微信订阅短链接
     * @param query
     * @return
     */
    Map getWxSubscribeToUrl(String query);

    /**
     * 获取活动海报配置
     * @param activityId
     * @return
     */
    Map getPosterConfig(Long activityId);

    /**
     * 修改海报配置
     * @param bo
     * @return
     */
    Boolean updatePosterConfig(PosterConfigBO bo);

    /**
     * 获取活动海报
     * @param activityId
     * @param memberId
     * @param qrValue
     * @return
     */
    Map getPosterImg(Long activityId, Long memberId,String qrValue) throws Exception;

    /**
     * 获取客户推广短链接
     * @param memberId
     * @param activityId
     * @return
     */
    Map getMemberPublicizeUrl(Long memberId, Long activityId);

    /**
     * 活动订单列表（不分页）
     * @param params
     * @return
     */
    List<ActivityOrderListVO> orderList(ActivityManageDetailParams params);

    /**
     * 查询活动清算列表
     * @param dto
     * @param pageQuery
     * @return
     */
    TableDataInfo<ActivityVO> settlementPageList(ActivityDO dto, PageQuery pageQuery);

    /**
     * 手动清算
     * @param activityId
     * @return
     */
    Map manualSettlement(Long activityId);

    /**
     * 清算
     * @param ids
     * @return
     */
    boolean settlement(Long[] ids);

    /**
     * 获取门店名称
     * @param id
     * @return
     */
    String getStoreName(Long id);

    /**
     * 清算申请
     * @param activityId
     * @return
     */
    boolean settlementApply(Long activityId);

    /**
     * 查询活动申请清算和已同意申请清算列表（分页）
     * @param dto
     * @param pageQuery
     * @return
     */
    TableDataInfo<ApplySettlementVO> applySettlementPageList(String keyword,ActivityDO dto, PageQuery pageQuery);

    /**
     * 活动拼团统计
     * @param id
     * @return
     */
    List<Map> teamSta(Long id);
}
